import javax.swing.*;
import java.awt.*;
import layout.TableLayout;

/**
* @file SimuFrame.java
*
* @brief Diese Datei enthält die SimuFrame-Klasse.
*
* @author Alrik Künne
*
* @date 01.06.2012 - erste Version
* @date 19.06.2012 - einige Veränderungen, Multi-Threading
**/

/** 
* @class SimuFrame 
* 
* @brief Das Hauptfenster, mit der Simulation
* 
* Abgeleitet von JFrame 
*/ 
@SuppressWarnings("serial")
public class SimuFrame extends JFrame{
	JLevelPanel levelpanels[];
	JLiftPanel liftpanel;
	JSimuGeneralPanel generalpanel;
	JShaftPanel shaft;
	JDisplay display;
	
	/**
	 * @brief Der Konstruktor
	 *
	 * @param title - der Fenstertitel
	 * 
	 * Dieser Konstruktor erzeugt das SimuFrame mit
	 * JDisplay, mehreren JLevelPanel, JShaftPanel und JSimuGeneralPanel
	 */
	public SimuFrame(String title)
	{
		super(title);
		//* Die Höhe des Fensters soll auf den Display passen und die Breite bei 900 bleiben
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		setSize(new Dimension(900, screenSize.height));
		//* das Fenster soll mittig ausgerichtet werden
		setLocation(( (screenSize.width  - (getSize().width)) / 2), ((screenSize.height - (getSize()).height) / 2) );
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//damit es auf dem Mac auch weggeht
		
		shaft = new JShaftPanel();
		shaft.setPreferredSize(new Dimension(200, 5*80));
		shaft.setMaximumSize(new Dimension(200, 5*80));
		shaft.setMinimumSize(new Dimension(200, 5*80));
		shaft.setBackground(Color.WHITE);
		
		JPanel floors=new JPanel();
		
		JPanel haus=new JPanel();
		
		JPanel rightPanel = new JPanel();
		double[][] rlayout = new double[][]{
			        // X-Achse
			        { TableLayout.FILL},
			        // Y-Achse
			        { 90, 0.5, 0.5}
			    };
	
		
		rightPanel.setMinimumSize(new Dimension(300,0));
		rightPanel.setPreferredSize(new Dimension(300,0));
		rightPanel.setLayout(new TableLayout(rlayout));
		

		JPanel displayPanel=new JPanel();
		displayPanel.setBackground(getBackground());
		display = new JDisplay();
		displayPanel.setLayout(new GridLayout(1, 1));
		displayPanel.add(display);
		displayPanel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
		
		rightPanel.add(displayPanel, "0,0");
		generalpanel = new JSimuGeneralPanel();
		rightPanel.add(generalpanel, "0,1");
		liftpanel=new JLiftPanel();
		rightPanel.add(liftpanel, "0,2");
		
		
		//Quelle Table Layout:http://blog.mynotiz.de/programmieren/java-tablelayout-1419/
		 double[][] hlayout = new double[][]{
			        // X-Achse
			        { 0.5, 200 , 200, 0.5},
			        // Y-Achse
			        { TableLayout.FILL}
			    };

		TableLayout hausLayout = new TableLayout(hlayout);
		haus.setLayout(hausLayout);
		
		haus.add(floors, "1,0");
		haus.add(shaft, "2,0");
		
		
		floors.setLayout(new BoxLayout(floors, BoxLayout.PAGE_AXIS));
		
		levelpanels = new JLevelPanel[9];
		for (int i=1; i<10; i++){
			levelpanels[i-1]=new JLevelPanel(10-i, i==1?1:i==9?-1:0); //krasse bedingte Zuweisung
			floors.add(levelpanels[i-1]);
		}

		
		JScrollPane scrollPane = new JScrollPane(haus);
		
		
		setLayout(new BorderLayout());
		add(scrollPane, BorderLayout.CENTER);
		add(rightPanel, BorderLayout.EAST);
		
		//Bei Mac wird das Icon anders erzeugt als auf den anderen OS
		if(System.getProperty("os.name").toString().compareTo("Mac OS X")!=0){
			 Image im = Toolkit.getDefaultToolkit().getImage("images/up_highres.png");
			 setIconImage(im);
		 }
		setVisible(true);
	}
}
